<?php
/*
 * uso:
 *     $msg = Mail::enviar(
 *           Utilidades::emailHost($this->Application),
 *           Utilidades::emailUsername($this->Application),
 *           Utilidades::emailPassword($this->Application),
 *           Utilidades::emailNombreEmisor($this->Application),
 *           "email de prueba",
 *           "<b>hola!!</b><br>esta es una prueba",
 *           true,
 *           "correodestino@gmail.com");
 */
class Mail {
  /**
   * envia mail
   * @param <type> $host
   * @param <type> $emailEmisor
   * @param <type> $passEmailEmisor
   * @param <type> $nombreEmisor
   * @param <type> $asunto
   * @param <type> $mensaje
   * @param <type> $listadoEmailDestinoPara
   * @param <type> $listadoEmailDestinoConCopia
   * @param <type> $listadoEmailDestinoConCopiaOculta
   * @param <type> $esHTML
   * @param <type> $listadoArchivosAdjuntos
   * @return <type>
   * @author VSR, 16/04/2011
   */
  public static function enviar($host, $emailEmisor, $passEmailEmisor, $nombreEmisor, $asunto, $mensaje, $esHTML, $listadoEmailDestinoPara,
                                $listadoEmailDestinoConCopia = "", $listadoEmailDestinoConCopiaOculta = "", $listadoArchivosAdjuntos = "") {
    $msg = "";
    try {
        $mail = new PHPMailer();
        $mail->Mailer = "smtp";
        $mail->SMTPAuth = true;
        $mail->Host = $host;
        $mail->Username = $emailEmisor;
        $mail->Password = $passEmailEmisor;
        $mail->From = $emailEmisor;
        $mail->FromName = ($nombreEmisor == "") ? $emailEmisor : $nombreEmisor;
        $mail->Timeout = 30;
        $mail->Subject = $asunto;
        $mail->Body = $mensaje;
        $mail->IsHTML($esHTML);

        if($listadoEmailDestinoPara == "" && $listadoEmailDestinoConCopia == "" && $listadoEmailDestinoConCopiaOculta == "") {
          throw new Exception("No se puede enviar correo porque no hay destinatarios");
        }
        
        //construye el listado de mail PARA
        $listadoEmailDestinoPara = str_replace(",",";",$listadoEmailDestinoPara);
        $arrMailPara = explode(";", $listadoEmailDestinoPara);
        for ($i = 0; $i <= count($arrMailPara) - 1; $i++) {
          $email = trim($arrMailPara[$i]);
          $mail->AddAddress($email);
        }

        //construye el listado de mail CON COPIA
        if($listadoEmailDestinoConCopia != "") {
          $listadoEmailDestinoConCopia = str_replace(",",";",$listadoEmailDestinoConCopia);
          $arrMailConCopia = explode(";", $listadoEmailDestinoConCopia);
          for ($i = 0; $i <= count($arrMailConCopia) - 1; $i++) {
            $email = trim($arrMailConCopia[$i]);
            $mail->AddCC($email);
          }
        }

        //construye el listado de mail CON COPIA OCULTA
        if($listadoEmailDestinoConCopiaOculta != "") {
          $listadoEmailDestinoConCopiaOculta = str_replace(",",";",$listadoEmailDestinoConCopiaOculta);
          $arrMailConCopiaOculta = explode(";", $listadoEmailDestinoConCopiaOculta);
          for ($i = 0; $i <= count($arrMailConCopiaOculta) - 1; $i++) {
            $email = trim($arrMailConCopiaOculta[$i]);
            $mail->AddBCC($email);
          }
        }

        //construye el listado de ARCHIVOS ADJUNTOS
        if($listadoArchivosAdjuntos != "") {
          $listadoArchivosAdjuntos = str_replace(",",";",$listadoArchivosAdjuntos);
          $arrArchivosAdjuntos = explode(";", $listadoArchivosAdjuntos);
          for ($i = 0; $i <= count($arrArchivosAdjuntos) - 1; $i++) {
            $path = trim($arrArchivosAdjuntos[$i]);
            $mail->AddAttachment($path);
          }
        }

        //envia el mail
        $exito = $mail->Send();
        $intentos = 1;

        while ((!$exito) && ($intentos <= 2)) {
            sleep(3);
            $msg .= $mail->ErrorInfo."; ";
            $exito = $mail->Send();
            $intentos = $intentos + 1;
        }

        if($exito) {
          $msg = "";
        }
    } catch (Exception $e) {
      $msg = $e->getMessage();
    }
    return $msg;
  }

}

?>
